/******************************************************************************/
/********************************** 功能方法 **********************************/
/******************************************************************************/

import { CommonObj } from "@/types";
import dayjs from "dayjs";
import * as xlsx from "xlsx";

/**
 * 导入excel中的数据
 * @param {any} fileBuffer
 * @param {object} opts
 * @returns {unknown[]}
 */
export function importExcel(
  fileBuffer: any,
  opts = {
    defval: "", //默认值配置
  }
): CommonObj[] {
  const workbook = xlsx.read(fileBuffer, { type: "buffer" }); // 获取 workbook
  const firstSheetName = workbook.SheetNames[0]; // 获取第一张表名
  const firstSheet = workbook.Sheets[firstSheetName]; // 获取第一张表
  return xlsx.utils.sheet_to_json(firstSheet, opts); // 获取数据
}

/**
 * 导出（下载）Excel数据表
 * @param {string[][]} data 要下载的数据  例：[["A1", "B1", "C1"], ["A2", "B2", "C2"],["A3", "B3", "C3"]]   通常第一行是表头，可以单独拼接
 * @param {string} fileName 文件名称
 * @param {string} sheetName 表名称
 * @param {Function} callback 回调函数
 * @link 参考链接 https://www.jianshu.com/p/f9ba3dd3cd4f
 */
export function exportExcel(
  data: string[][] = [],
  fileName = dayjs().format("YYYYMMDD"),
  sheetName = "表1",
  callback?: () => void
) {
  const wb = xlsx.utils.book_new(); // 创建workbook
  // 创建sheet
  // const ws = xlsx.utils.aoa_to_sheet(data);
  const ws = xlsx.utils.json_to_sheet(data, {
    // header: ["A", "B", "C", "D", "E", "F", "G"],
    skipHeader: true,
  });
  xlsx.utils.book_append_sheet(wb, ws, sheetName); // 把sheet放入workbook
  xlsx.writeFile(wb, fileName + ".xls"); // 写入文件(通过文件名控制导出的类型)
  callback?.();
}
